package com.kkb.mybatis.framework.sqlsource;

import com.kkb.mybatis.framework.config.BoundSql;
import com.kkb.mybatis.framework.config.DynamicContext;
import com.kkb.mybatis.framework.sqlnode.SqlNode;
import com.kkb.mybatis.framework.parser.SqlSourceParser;

/**
 *  获取不带有${}和动态标签的sql信息
 *  只需要处理一次，就能得到sql语句，不需要每次都处理，所以将它放在构造函数中执行
 */
public class RawSqlSource implements SqlSource {

    private SqlSource sqlSource;

    public RawSqlSource(SqlNode mixedSqlNode) {

        // 1.处理所有的sql节点，获取合并之后的完整的sql语句
        DynamicContext dynamicContext = new DynamicContext(null);
        mixedSqlNode.apply(dynamicContext);
        String sqlText = dynamicContext.getSql();

        // 2.调用SqlSource的处理逻辑，对于#{}进行处理
        //处理#{}
        SqlSourceParser sqlSourceParser = new SqlSourceParser();
        sqlSource = sqlSourceParser.parse(sqlText);
    }

    @Override
    public BoundSql getBoundSql(Object param) {
        return sqlSource.getBoundSql(param);
    }
}
